package com.smart.community.property.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.Data;

import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;

/**
 * 水费视图对象
 * 
 * 严格按照《Java后端SpringBoot代码开发规范.md》VO规范实现：
 * - 功能单一原则：VO类必须是单纯的数据传输对象，功能必须单一
 * - 禁止业务逻辑：只包含数据字段和基本的getter/setter方法，禁止添加业务逻辑方法
 * - 完整注释：所有字段都有完整的JavaDoc注释
 * - 序列化支持：实现Serializable接口，支持序列化
 * 
 * @author Wu.Liang
 * @since 2024-12-21
 * @version 1.0.0
 */
@Data
public class WaterFeeVO implements Serializable {
    
    private static final long serialVersionUID = 1L;
    
    /** 主键ID */
    private Long id;
    
    /** 费用编号 */
    private String feeNo;
    
    /** 用户ID */
    private Long userId;
    
    /** 用户姓名 */
    private String userName;
    
    /** 社区ID */
    private Long communityId;
    
    /** 社区名称 */
    private String communityName;
    
    /** 楼栋ID */
    private Long buildingId;
    
    /** 楼栋名称 */
    private String buildingName;
    
    /** 单元ID */
    private Long unitId;
    
    /** 单元名称 */
    private String unitName;
    
    /** 房户ID */
    private Long householdId;
    
    /** 房户号 */
    private String roomNumber;
    
    /** 房户地址（格式：{社区名}-{楼栋名}-{单元名}） */
    private String householdAddress;
    
    /** 计费周期 */
    private String billingPeriod;
    
    /** 水表编号 */
    private String meterNo;
    
    /** 上次读数 */
    private BigDecimal lastReading;
    
    /** 本次读数 */
    private BigDecimal currentReading;
    
    /** 用水量 */
    private BigDecimal usageAmount;
    
    /** 单价 */
    private BigDecimal unitPrice;
    
    /** 费用金额 */
    private BigDecimal amount;
    
    /** 支付状态（0-未支付，1-已支付，2-逾期，3-部分支付） */
    private Integer paymentStatus;
    
    /** 支付状态名称 */
    private String paymentStatusName;
    
    /** 已支付金额 */
    private BigDecimal paidAmount;
    
    /** 未支付金额 */
    private BigDecimal unpaidAmount;
    
    /** 支付金额 */
    private BigDecimal paymentAmount;
    
    /** 支付时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime paymentTime;
    
    /** 支付方式（1-现金，2-微信，3-支付宝，4-银行卡） */
    private Integer paymentMethod;
    
    /** 支付方式名称 */
    private String paymentMethodName;
    
    /** 抄表日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate readingDate;
    
    /** 到期日期 */
    @JsonFormat(pattern = "yyyy-MM-dd")
    private LocalDate dueDate;
    
    /** 状态（0-禁用，1-启用） */
    private Integer status;
    
    /** 状态名称 */
    private String statusName;
    
    /** 备注 */
    private String remark;
    
    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime createTime;
    
    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime updateTime;
    
    /** 创建人 */
    private Long createBy;
    
    /** 更新人 */
    private Long updateBy;
    
    /** 版本号 */
    private Integer version;
    
    /** 是否删除（0-未删除，1-已删除） */
    private Integer deleted;
}
